#ifndef __KEY_H
#define __KEY_H
#include "air001xx_hal.h"

#define SHORT_KEY_ENABLE 0 //�?否使用短�?    0:不使�?  1:使用
#define LONG__KEY_ENABLE 1 //�?否使用长�?�?  0:不使�?  1:使用


#define KEY_NUM 5
#define KEY_SCAN_TIME 10

typedef struct
{
	unsigned char : 5;				   //预留
	unsigned char new_key : 1;		   //新的按建状�?
	unsigned char old_key : 1;		   //旧的按键状�?
	unsigned char long_start_flag : 1; //长按开始标�?,用于按键�?起动�?
	unsigned char key_value;		   //按键�?�?

	unsigned char long_hold_time; //长按保持时间
	unsigned int comparison_time; //比较时间
	unsigned int long_start_time; //长按开始时�?
	unsigned int hold_time;		  //按下保持时间

	void (*down_cb)(void);		 //按下回调函数
	void (*up_cb)(void);		 //弹起回调函数(不触发长按时)
	void (*long_start_cb)(void); //长按开始回调函�?
	void (*long_hold_cb)(void);	 //长按保持回调函数
} LongKey_Handle_Type;

typedef struct
{
	unsigned char : 6;		   //预留
	unsigned char new_key : 1; //新的按建状�?
	unsigned char old_key : 1; //旧的按键状�?
	unsigned char key_value;   //按键�?�?

	void (*down_cb)(void); //按下回调函数
} ShortKey_handle_type;


extern LongKey_Handle_Type stLongKey_Handle[KEY_NUM];


#if LONG__KEY_ENABLE == 1 //长短按键
//长短按键初�?�化
void LongKeyEvents_Init(LongKey_Handle_Type * key_handle, uint8_t key_val, uint16_t long_start, uint8_t long_hold);
//长短按键回调函数
void LongKeyEvents_Set_CB(LongKey_Handle_Type * key_handle, void (*down_cb)(void), void (*up_cb)(void), void (*long_start_cb)(void), void (*long_hold_cb)(void));
//长短按键�?�?
void LongKeyEvents(LongKey_Handle_Type * key_handle, uint8_t key_val);
#endif



#if SHORT_KEY_ENABLE == 1 //�?按按�?
//�?按按�?初�?�化
void ShortKeyEvents_Init(ShortKey_handle_type * key_handle, uint8_t key_val, void (*down_cb)(void));
//�?按按�?�?�?
void ShortKeyEvents(ShortKey_handle_type * key_handle, uint8_t key_val);
#endif

#endif
